home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / comm / comm5 / nwsbrkr5.lha / Reader / NewsBreaker / src / gui / Help.c < prev    next >
Text File  |  1996-12-15  |  8KB  |  303 lines

  1. /*
  2.  * Help.c -- Online Hilfen
  3.  */
  4.  
  5. /*
  6.  * OpenAmigaGuide -- öffnet Fenster mit Guide-Hilfe
  7.  * OpenDatatypeWindow -- öffnet Fenster mit Datatype
  8.  * void OpenAbout -- öffnet Aboutfenster
  9.  */
  10.  
  11. #define UMS_ROOT_PATH       "UMS:"
  12. #define NB_APP_TYPE        "Reader"
  13. #define NB_LANGUAGE        "deutsch"
  14.  
  15. #define NB_GUIDE_PATH      UMS_ROOT_PATH "Doc/" NB_LANGUAGE "/"
  16. #define NB_GUIDE_SUFFIX    ".guide"    /* Standardtyp der Dokumentation */
  17.  
  18. #define NB_GUIDEFILE              NB_GUIDE_PATH NB_NAME NB_GUIDE_SUFFIX
  19. #define NB_GUIDEFILE_FALLBACK     "PROGDIR:" NB_NAME NB_GUIDE_SUFFIX
  20. #define NB_GUIDEFILE_FALLBACK2    "PROGDIR:/Doc/" NB_LANGUAGE "/" NB_NAME NB_GUIDE_SUFFIX
  21.  
  22.  
  23. /*
  24.  * OpenAmigaGuide (struct Window *hostwin) -- öffnet Fenster mit Guide-Datatype
  25.  *
  26.  * INPUTS
  27.  *   hostwin -- ein Fenster des Hauptprogramms
  28.  *
  29.  * RESULT
  30.  *   void (todo -- success melden)
  31.  *
  32.  * Quelle: Die Routine kommt vom GUICreator-Programm
  33.  */
  34.  
  35. /*
  36.    OpenAmigaGuide() gibt dem Anwender eine AmigaGUIDE-Onlinehilfe
  37.  
  38.    Beschreibung:
  39.    - öffne Fenster mit Scrollbars,
  40.    - erzeuge AmigaGuide-Datatype
  41.    - lade das .guide File in den Datatype und
  42.    - binde diese BOOPSI Gadgets (Datatype ist BOOPSI Gadget) untereinander , todo
  43.    - binde Gadgets an das Fenster, OK
  44.  
  45.  */
  46.  
  47.  
  48. void
  49. OpenAmigaGuide (struct Window *hostwin)
  50. {
  51.   /* Feld möglicher Pade+Filenamen */
  52.   static STRPTR names[] =
  53.   {
  54.     NB_GUIDEFILE,
  55.     NB_GUIDEFILE_FALLBACK,
  56.     NB_GUIDEFILE_FALLBACK2,
  57.     NULL};
  58.  
  59.   OpenDatatypeWindow (hostwin, names);
  60. }
  61.  
  62. /*
  63.  * OpenAbout -- Aboutfenster
  64.  */
  65.  
  66. void
  67. OpenAbout (struct Window *hostwin)
  68. {
  69.   static STRPTR names[] =
  70.   {
  71.     "dh0:nb/Reader/NewsBreaker/experimental/Pic/nb.ilbm",
  72.     NULL};
  73.  
  74.   OpenDatatypeWindow (hostwin, names);
  75. }
  76.  
  77.  
  78. void
  79. OpenDatatypeWindow (struct Window *hostwin, STRPTR filenames[])
  80. {
  81.   struct IntuiMessage *imessage = NULL;
  82.   struct Gadget *idcmpgad = NULL;
  83.   struct TagItem *tag = NULL;
  84.   struct TagItem *tstate = NULL;
  85.   ULONG idcmpclass = 0;
  86.   UWORD messagecode = 0;
  87.   BOOL running = TRUE;
  88.  
  89.   struct Screen *customscreen = hostwin->WScreen;
  90.  
  91.   struct Gadget *prop_abObject, *up_abObject, *down_abObject;
  92.   struct Image *up_abImage, *down_abImage;
  93.   ULONG *connect_abObject;
  94.  
  95.   struct Window *win = NULL;
  96.  
  97. /* Prop-Gadget */
  98.  
  99.   static struct TagItem prop2aguide[] =
  100.   {
  101.     {PGA_Top, DTA_TopVert},
  102.     {TAG_DONE}
  103.   };
  104.  
  105. /* Amigaguide-Gadget: funkt nicht :-( */
  106.  
  107.   static struct TagItem aguide2prop[] =
  108.   {
  109.     {DTA_TopVert, PGA_Top},
  110.     {DTA_VisibleVert, PGA_Visible},
  111.     {DTA_TotalVert, PGA_Total},
  112.     {TAG_DONE}
  113.   };
  114.  
  115.   APTR visualinfo = GetVisualInfo (hostwin->WScreen, TAG_DONE);
  116.   if (visualinfo)
  117.     {
  118.       ULONG i = 0;
  119.       Object *o = NULL;
  120.  
  121.       while ((o == NULL) && (filenames[i] != NULL))
  122.     {
  123.       o = NewDTObject (filenames[i++],
  124.                DTA_SourceType, DTST_FILE,
  125.                DTA_ControlPanel, TRUE,
  126.                TAG_DONE);
  127.     }
  128.  
  129.       if (o)
  130.     {
  131.       win = OpenWindowTags (NULL, WA_Activate, TRUE,
  132.                 WA_Flags, WFLG_DEPTHGADGET |
  133.                 WFLG_DRAGBAR |
  134.                 WFLG_CLOSEGADGET |
  135.                 WFLG_SIZEGADGET |
  136.                 WFLG_SIZEBBOTTOM |
  137.                 WFLG_SIZEBRIGHT,
  138.       //WA_InnerHeight, height,
  139.       //WA_InnerWidth, width,
  140.                 WA_MinHeight, 50,
  141.                 WA_MinWidth, 50,
  142.                 WA_MaxHeight, customscreen->Height,
  143.                 WA_MaxWidth, customscreen->Width,
  144.                 WA_IDCMP, IDCMP_CLOSEWINDOW |
  145.                 IDCMPUPDATE |
  146.                 IDCMP_VANILLAKEY |
  147.                 IDCMP_GADGETDOWN,
  148.       //WA_Left, left,
  149.       //WA_Top, top,
  150.                 WA_SmartRefresh, TRUE,
  151.                 WA_CustomScreen, customscreen,
  152.                 TAG_DONE);
  153.  
  154.       if (win)
  155.         {
  156.  
  157. /* todo: BOOPSI Gadgets für Scrollbar. */
  158. /* todo: Zur Zeit keine Bindung des Scrollbars an den Datatype */
  159. /* todo: Notifiction. Also: Klick auf Scrollbar --> Datatype scrollt */
  160. /* todo: Klick auf Guide-Link, neuer Text: --> Scrollbar(-Top) ändert sich usw. */
  161.  
  162.           prop_abObject = NewObject (NULL, "propgclass",
  163.                      GA_ID, 2,
  164.                      GA_Top, win->BorderTop + 2,
  165.                        GA_RelRight, -(win->BorderRight - 5),
  166.                      GA_Width, win->BorderRight - 8,
  167.           GA_RelHeight, -(win->BorderTop + (3 * win->BorderBottom)) - 6,
  168.                      GA_RightBorder, TRUE,
  169.                      ICA_MAP, prop2aguide,
  170.                      ICA_TARGET, NULL,
  171.                      PGA_NewLook, TRUE,
  172.                      PGA_Borderless, TRUE,
  173.                      PGA_Visible, 50,
  174.                      PGA_Total, 50,
  175.                      TAG_DONE);
  176.  
  177.           up_abImage = NewObject (NULL, "sysiclass",
  178.                       SYSIA_DrawInfo, dri,
  179.                       SYSIA_Which, UPIMAGE,
  180.                       IA_Width, win->BorderRight,
  181.                       IA_Height, win->BorderBottom,
  182.                       TAG_DONE);
  183.  
  184.           down_abImage = NewObject (NULL, "sysiclass",
  185.                     SYSIA_DrawInfo, dri,
  186.                     SYSIA_Which, DOWNIMAGE,
  187.                     IA_Width, win->BorderRight,
  188.                     IA_Height, win->BorderBottom,
  189.                     TAG_DONE);
  190.  
  191.           up_abObject = NewObject (NULL, "buttongclass",
  192.                  GA_RelBottom, -(3 * win->BorderBottom) - 1,
  193.                        GA_RelRight, -(win->BorderRight - 1),
  194.                        GA_Height, win->BorderBottom,
  195.                        GA_Width, win->BorderRight,
  196.                        GA_Image, up_abImage,
  197.                        GA_RightBorder, TRUE,
  198.                        GA_Previous, prop_abObject,
  199.                        TAG_DONE);
  200.  
  201.           down_abObject = NewObject (NULL, "buttongclass",
  202.                      GA_RelBottom, -(2 * win->BorderBottom),
  203.                        GA_RelRight, -(win->BorderRight - 1),
  204.                      GA_Height, win->BorderBottom,
  205.                      GA_Width, win->BorderRight,
  206.                      GA_Image, down_abImage,
  207.                      GA_RightBorder, TRUE,
  208.                      GA_Previous, up_abObject,
  209.                      TAG_DONE);
  210.  
  211.           connect_abObject = NewObject (NULL, ICCLASS,
  212.                         ICA_MAP, aguide2prop,
  213.                         ICA_TARGET, prop_abObject,
  214.                         TAG_DONE);
  215.  
  216.           if (prop_abObject && up_abImage &&
  217.           down_abImage && up_abObject && down_abObject)
  218.         {
  219.           SetDTAttrs (o, NULL, NULL,
  220.                   GA_Left, win->BorderLeft + 2,
  221.                   GA_Top, win->BorderTop + 2,
  222.                   GA_RelWidth, - (win->BorderLeft+win->BorderRight),
  223.                   GA_RelHeight,- (win->BorderTop+win->BorderBottom),
  224.                   ICA_TARGET, ICTARGET_IDCMP,
  225.                   TAG_DONE);
  226.           AddDTObject (win, NULL, o, -1L);
  227.  
  228.           /* BOOPSI -- Datatype Bindung läuft nicht */
  229.           SetGadgetAttrsX (prop_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
  230.           //SetGadgetAttrsX (up_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
  231.           //SetGadgetAttrsX (down_abObject, win, NULL, ICA_TARGET, o, TAG_DONE);
  232.  
  233.           AddGList (win, prop_abObject, -1, -1, NULL);
  234.           RefreshGList (prop_abObject, win, NULL, -1);
  235.         }
  236.  
  237.           while (running)
  238.         {
  239.           Wait (1L << win->UserPort->mp_SigBit);
  240.  
  241.           while (imessage = (struct IntuiMessage *) GetMsg ((struct MsgPort *) win->UserPort))
  242.             {
  243.               idcmpgad = (struct Gadget *) imessage->IAddress;
  244.               idcmpclass = imessage->Class;
  245.               messagecode = imessage->Code;
  246.  
  247.               ReplyMsg ((struct Message *) imessage);
  248.  
  249.               switch (idcmpclass)
  250.             {
  251.               /* Ereignistabelle wäre besser als switch/case, todo */
  252.             case IDCMP_VANILLAKEY:
  253.               if (messagecode == 27 || messagecode == 'o' || messagecode == 'O')
  254.                 running = FALSE;
  255.               break;
  256.             case IDCMP_REFRESHWINDOW:
  257.               BeginRefresh (win);
  258.               EndRefresh (win, TRUE);
  259.               break;
  260.             case IDCMP_CLOSEWINDOW:
  261.               running = FALSE;
  262.               break;
  263.             case IDCMP_IDCMPUPDATE:
  264.               tstate = (struct TagItem *) imessage->IAddress;
  265.               while (tag = NextTagItem (&tstate))
  266.                 {
  267.                   if (tag->ti_Tag == DTA_Sync)
  268.                 {
  269.                   RefreshDTObjectA (o, win, NULL, NULL);
  270.                 }
  271.                 }
  272.               break;
  273.             }    /* switch */
  274.  
  275.             }        /* while */
  276.         }        /* while */
  277.  
  278.           DisposeObject (down_abObject);
  279.           DisposeObject (up_abObject);
  280.           DisposeObject (down_abImage);
  281.           DisposeObject (up_abImage);
  282.           DisposeObject (prop_abObject);
  283.  
  284.           CloseWindow (win);
  285.         }
  286.       else
  287.         {
  288.           ShowError ("AmigaGUIDE Fenster\n"
  289.              "konnte nicht geöffnet werden.");
  290.         }
  291.       DisposeDTObject (o);
  292.     }
  293.       else
  294.     {
  295.       ShowError ("Datatype-Fenster\nnicht geöffnet. Ursachen:"
  296.              " ·  Dokument nicht gefunden  oder\n"
  297.              " ·  Zu wenig Speicher  oder\n"
  298.              " ·  Benötigter Datatype nicht vorhanden.");
  299.     }
  300.       FreeVisualInfo (visualinfo);
  301.     }
  302. }
  303.